package main

import (
	"errors"
	"fmt"
	"runtime/debug"
)

// 1.error作为返回值交给调用函数处理
func foo1() error {
	return foo2()
}

func foo2() error {
	return errors.New("出错了！")
}

// 2.中断程序，遇到错误直接停止
// func init() {
// 	_, err := os.ReadFile("not exists file path")
// 	if err != nil {
// 		panic(err.Error()) //直接退出
// 	}
// }

// 3.使用difer捕获panic
func readSplice() {
	defer func() {
		if err := recover(); err != nil {
			fmt.Printf("err: %v\n", err)       //打印错误
			fmt.Println(string(debug.Stack())) //打印堆栈
		}
	}()
	var list = []int{1, 2}
	fmt.Println(list[4])
}

func main() {
	err := foo1()
	fmt.Printf("err: %v\n", err)

	readSplice()
	if a := 1; a == 1 {
		fmt.Println(a)
	}
}
